/*
 * @(#)InterceptorProcessor.java 1.0 2009/12/01
 */
package stardust.core.java.interceptor;


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


/**
 * 拦截处理器。
 * <p>
 * 在实现拦截器接口后进行方法调用过滤时帮助简化反射操作。
 * <p/>
 * @version 1.0, 2009/12/01
 * @author ChenChang
 */
public class InterceptorProcessor
{

  /**
   * 拦截的目标对象。
   */
  private Object object;

  /**
   * 调用的方法。
   */
  private Method method;

  /**
   * 调用方法的参数。
   */
  private Object[] args;

  /**
   * 创造一个新的拦截处理器。
   * <p/>
   * @param object
* 拦截的目标对象。
   * @param method
* 调用的方法。
   * @param args
  * 调用方法的参数。
   */
  public InterceptorProcessor(Object object, Method method, Object... args)
  {
    this.object = object;
    this.method = method;
    this.args = args;
  }

  /**
   * 对拦截的方法进行调用并返回调用结果如果存在返回结果。
   * <p/>
   * @return 方法执行结果。
   * <p/>
   * @throws IllegalArgumentException
 throws
   *                                                                                                        IllegalAccessException
   throws
   *                                                                                                                                              InvocationTargetException
   */
  public Object process() throws Throwable
  {
    try
    {
      return this.method.invoke(this.object, this.args);
    }
    catch(InterceptorException e)
    {
      throw e.getCause();
    }
  }

  public Object[] getArgs()
  {
    return args;
  }

  public Method getMethod()
  {
    return method;
  }

  public Object getObject()
  {
    return object;
  }

}
